import request from '@/config/axios'

// 简历库 VO
export interface PersonnelResumeVO {
  id: string // 简历ID
  name: string // 名称
  activeState?: number // 活跃状态 (?:表示可选，因为API示例中resumeSource为null，其他也可能为null/undefined)
  jobName?: string // 岗位名称
  phone?: string // 电话
  jonLong?: number // 工作时长
  jobState?: string // 工作意向
  sex?: number // 性别
  age?: number // 年龄
  education?: string // 最高学历
  advantage?: string // 优势
  resumeSource?: number // 简历分数
  permission?: string // 权限 默认私有
  candidate?: boolean // 是否候选
  invitation?: boolean // 是否邀面
  reserve?: boolean // 是否储备
  admission?: boolean // 是否合适
  workingStatus?: string // 工作状态
  updateTime?: number // 更新时间 (时间戳)
  aiResumeComment?: string // ai评语
  assessUrl?: string // 测评报告url
  evaluate?: string // 面试评价
  hrEvaluate?: string // 人事评价
  tags?: string // 标签 (逗号分隔)
  transMap?: Record<string, any> // transMap，根据示例是对象
  workExp?: WorkExpVO[] // 工作经历
  educations?: EducationVO[] // 教育经历
}

// 工作经历VO
export interface WorkExpVO {
  id: string
  resumeId: string
  companyName: string
  jobName: string
  startTime: string
  endTime: string
}

// 教育经历VO
export interface EducationVO {
  id: string
  resumeId: string
  schoolName: string
  major: string
  qualification: string
  startTime?: string
  endTime?: string
  degree?: string
}

// 定义简历拓展信息响应数据的类型
export interface PersonnelResumeExpandVO {
  id: string // 简历ID
  resumeComment?: string // ai评语
  evaluate?: string // 面试评价
  hrEvaluate?: string // 人事评价
  assessUrl?: string // 测评报告url
  html?: string // 简历的html源码
  notJoinReason?: string // 未入职原因
  outJobReason?: string // 离职原因
  createTime: string // 创建时间
}

// 面试信息 VO
export interface PersonnelInterviewVO {
  id: string // 面试ID
  viewTime: string // 面试时间
  viewName: string // 面试名称如 算法面
  resumeId?: string // 简历id
  resumeExpId?: string // 简历拓展表id
  viewState?: string // 面试状态
  createTime: string // 创建时间
  name?: string // 名称
  jsonName?: string // 岗位名称
  phone?: string // 联系方式
  jonLong?: number // 工作时长
  age?: number // 年龄
  education?: string // 最高学历
  resumeSource?: number // 匹配分数
  assessUrl?: string // 测评报告url
  evaluate?: string // 面试评价
  hrEvaluate?: string // 人事评价
  resumeComment?: string // ai评语
  reserve?: boolean // 是否储备
  admission?: boolean // 是否合适
}

// 简历AI规则 VO
export interface PersonnelAiRuleVO {
  modelId: string // AI模型ID
  positionType: string // 职位类型
  prompt: string // 提示词
  threshold: number // 分数阈值
}

// 简历库 API
export const PersonnelResumeApi = {
  // 查询简历库分页
  getPersonnelResumePage: async (params: any) => {
    return await request.get({ url: `/hrm/personnel-resume/page`, params })
  },

  // 查询简历库详情
  getPersonnelResume: async (id: number) => {
    return await request.get({ url: `/hrm/personnel-resume/get?id=` + id })
  },

  // 新增简历库
  createPersonnelResume: async (data: PersonnelResumeVO) => {
    return await request.post({ url: `/hrm/personnel-resume/create`, data })
  },

  // 修改简历库
  updatePersonnelResume: async (data: PersonnelResumeVO) => {
    return await request.put({ url: `/hrm/personnel-resume/update`, data })
  },

  // 删除简历库
  deletePersonnelResume: async (id: number) => {
    return await request.delete({ url: `/hrm/personnel-resume/delete?id=` + id })
  },

  // 导出简历库 Excel
  exportPersonnelResume: async (params) => {
    return await request.download({ url: `/hrm/personnel-resume/export-excel`, params })
  },

  // 查询简历拓展信息
  getPersonnelResumeExpand: async (id: string | number) => {
    return await request.get<PersonnelResumeExpandVO>({
      url: '/hrm/personnel-resume-expand/get',
      params: { id }
    })
  },

  // 刷新简历状态、打分并设为私有
  refreshPersonnelResumeStatus: async () => {
    return await request.get<void>({
      url: '/hrm/personnel-resume/refresh'
    })
  },
  
  // 刷新单个简历状态
  refreshSingleResumeStatus: async (id: string) => {
    return await request.get<void>({
      url: '/hrm/personnel-resume/refreshOne',
      params: { id }
    })
  },
  
  // 创建简历AI评估规则
  createPersonnelAiRule: async (aiModelId: string, jobName: string, prompt: string, threshold: number) => {
    return await request.post({ 
      url: '/hrm/personnel-ai-rule/create', 
      data: {
        aiModelId,
        jobName,
        prompt,
        threshold
      }
    })
  },
  
  // 批量上传简历文件
  uploadResumes: async (files: File[], aiId: number) => {
    const formData = new FormData()
    
    // 为每个文件使用相同的参数名 'files'
    files.forEach(file => {
      formData.append('files', file)
    })
    
    return await request.post<void>({
      url: '/hrm/personnel-resume/uploadFilesToPersonnelResume',
      params: { aiId },
      data: formData,
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    })
  },
  
  // 获取面试列表
  getInterviewList: async (params: { interviewDate: string }) => {
    return await request.get({
      url: '/hrm/personnel-resume/interview-list',
      params
    })
  },
  
  // 获取面试日历数据
  getInterviewCalendar: async () => {
    return await request.get({
      url: '/hrm/personnel-resume/interview-calendar'
    })
  },
  
  // 获取面试分页
  getPersonnelInterviewPage: async (params: {
    viewTime?: string[] // 面试时间
    viewName?: string // 面试名称
    resumeId?: string // 简历id
    viewState?: string // 面试状态
    createTime?: string[] // 创建时间
    pageNo: number // 页码
    pageSize: number // 每页条数
  }) => {
    return await request.get<{
      list: PersonnelInterviewVO[],
      total: number
    }>({
      url: '/hrm/personnel-interview/page',
      params
    })
  },
  
  // 创建面试
  createPersonnelInterview: async (data: {
    viewTime: string // 面试时间
    resumeId: string // 简历id
    viewName?: string // 面试名称，可选
  }) => {
    return await request.post({
      url: '/hrm/personnel-interview/create',
      data
    })
  }
}
